package com.atguigu.gmall.product;

import com.atguigu.gmall.model.product.*;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * service-Item调用的feign接口
 */
@FeignClient(name = "service-product" ,path = "/api/item",contextId = "productFeign")
public interface ProductFeign {
    /**
     * 显示商品详情
     * @param skuId
     * @return
     */
    @GetMapping("/getSkuInfo/{skuId}")
    public SkuInfo getSkuInfo(@PathVariable(value = "skuId") Long skuId);

    /**
     * 查询商品图片集合
     * @param skuId
     * @return
     */
    @GetMapping("/getSkuImage/{skuId}")
    public List<SkuImage> getSkuImage(@PathVariable("skuId") Long skuId);
    /**
     * 查询商品价格
     * @param skuId
     * @return
     */
    @GetMapping("/getPrice/{skuId}")
    public BigDecimal getPrice(@PathVariable("skuId") Long skuId);

    /**
     * 根据三级分类Id查询三级分类
     * @param category3Id
     * @return
     */
    @GetMapping("/getCategory/{category3Id}")
    public BaseCategoryView getCategory(@PathVariable("category3Id") Long category3Id);
    /**
     * 根据SkuId spuId查询平台销售属性名和值，并显示选定的值
     * @param spuId
     * @param skuId
     * @return
     */
    @GetMapping("/getSpuSaleAttr/{skuId}/{spuId}")
    public List<SpuSaleAttr> getSpuSaleAttr(@PathVariable("skuId") Long skuId,
                                            @PathVariable("spuId") Long spuId);

    /**
     * 根据指定的spu的id查询这个spu所拥有的全部sku的id和每个sku对应的销售属性值的内容
     * @param spuId
     * @return
     */
    @GetMapping("/getSkuValuesBySpu/{spuId}")
    public Map getSkuValuesBySpu(@PathVariable("spuId") Long spuId);

    /**
     * 根据id 查询品牌信息
     * @param id
     * @return
     */
    @GetMapping("/getTrademark/{id}")
    public BaseTrademark getTrademark(@PathVariable("id") Long id);
    /**
     * 获取平台属性
     * @param skuId
     * @return
     */
    @GetMapping("/getSkuAttrValue/{skuId}")
    public List<BaseAttrInfo> getSkuAttrValue(@PathVariable("skuId") Long skuId);

    /**
     * 扣减商品库存
     * @param detailMap
     */
    @GetMapping("/deductSku")
    public void deductSku(@RequestParam Map<String, String> detailMap);

    /**
     * 回滚库存
     * @param rollbackMap
     */
    @GetMapping("/rollBackStock")
    public void rollBackStock(Map<String, String> rollbackMap);
}
